package is.api.demo.isgateway.utils;

import is.api.demo.isgateway.support.CipherConstants;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

import java.security.InvalidAlgorithmParameterException;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.spec.ECGenParameterSpec;


/**
 * sm2密钥对生成器
 *
 * @author chen.chen
 */
public class Sm2KeyGenerateFactory {
    /**
     * 获取SM2密钥对生成器
     *
     * @return SM2密钥对生成器
     */
    public static KeyPairGenerator generator() throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
        // 获取SM2椭圆曲线的参数,使用标准推荐参数,若需要自定义ecc参数,需自己构建
        final ECGenParameterSpec sm2Spec = new ECGenParameterSpec(CipherConstants.SPEC_NAME);
        // 获取一个椭圆曲线类型的密钥对生成器
        final KeyPairGenerator kpg = KeyPairGenerator.getInstance(CipherConstants.ALGORITHM_NAME, new BouncyCastleProvider());
        // 使用SM2参数初始化生成器
        kpg.initialize(sm2Spec);
        return kpg;
    }

}
